#include <iostream>

/*
    this 来做链式函数的设计
*/

class MyNumber
{

    int n;

public:
    MyNumber() : n(10) {}

    MyNumber(int n) : n(n) {}

    void display()
    {
        std::cout << this->n << std::endl;
    }

    MyNumber &add(int n)
    {
        this->n += n;
        return *this;
    }

    MyNumber(const MyNumber &number)
    {
        std::cout << "拷贝构造函数调用了~~~" << std::endl;
        this->n = number.n;
    }

    MyNumber &minus(int n) // 如果返回值不是MyNumber& 而是 MyNumber 的话，就会产生一个新的对象，相当于是调用了拷贝构造函数，使用了 MyNumber& 才代表返回了这个对象本身
    {
        this->n -= n;
        return *this;
    }
};

int main(int argc, char const *argv[])
{
    

    MyNumber n;

    n.add(10).add(100).minus(1).display();

    n.display(); // 可以发现这里是20

    return 0;
}
